A.Got Any Grapes? (水题)
手冷把y写成x被fst了
1 |
|
B.Yet Another Array Partitioning Task (毒瘤?)
题意
让你分出k个区间,每个区间至少m个数,然后取每个区间的前m个最大值相加,使值最大
思路
本质就是求前m*k大的数,然后我们就可以把前m×k大的数求出来 然后记录坐标,然后连续m个分为一组即可
1 |
|
C. Trailing Loves (or L’oeufs?) (质因子分解)
题意
求n!在b进制下末尾0的个数
思路
只要会十进制下求n!的就会这题了
1 |
|
D.Flood Fill (区间DP,本质求LCS,记忆化搜索)
题意
一个颜色序列,每个位置有一个颜色,选择一个起始位置,每次可以改变左右的一段颜色段(如果左边和右边颜色一样就一起改变),把整段变成一种颜色, 问最少操作多少次。n<=5000
思路
首先一整段颜色段肯定没用,我们可以缩点,简化题意
然后想到区间DP(石子合并) 但是石子合并是可以任意起点,而这题固定起点了,
所以可以把区间DP的n^3变成n^2了,我区间DP很差所以比赛只想出来记忆化搜索
记忆化搜索对付这种只有终点没有起点的题真的是屡试不爽
1 |
|
E.Arithmetic Progression (mt19937+交互题+二分找最大值+随机数取GCD)
题意
你电脑中有一个等差数列,你有两种循环
1.问这个数列的第x项的值
2.问是否有一个项的值比X大
让你在60次内找出这个等差数列的首项和公差
思路
很明显可以在32次内得出最大值,然后就是求公差了,
我们既然有了最大值,那我们就可以求出任意一项和最大值的差值肯定是公差的倍数
然后我们就直接对这些差值求GCD
1 |
|
F.Please, another Queries on Array? (线段树区间乘+欧拉函数+bitset)
题意
两个操作
1.把一个区间乘上一个值X
2.求一个区间的欧拉函数
思路
看到区间乘法很容易想到线段树
那么欧拉函数怎么求,很明显欧拉函数和素因子个数有关
发现每个x都小于等于300 打表发现300内的素因子只有62个
然后就是怎么记录这几个素因子的问题了,你可以用LL的位数或者bitset记录
(或者用数组?那可能会超时吧)
1 |
|